#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
from urllib import parse
import redis
from db.mysql_handle import MysqlHandler

__author__ = 'Txc001'

MYSQL_CONFIG = {
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'password': '',
    'db': 'lagou',
    'charset': 'utf8'
}

REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379


def fun_redis_to_mysql(redis_items):
    """
        将 redis 数据库中的 items 转义到 mysql数据库中
    :return:
    """
    # 实例化一个 mysql 数据库操作对象
    mysql_handler = MysqlHandler(MYSQL_CONFIG)
    # 实例化一个 redis数据库的操作对象
    r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, decode_responses=True)

    # 死循环，间隔一定时间，执行转移任务
    # while 1:

    # 死循环，直到 redis 数据库中的 dingdian:items 清空，才推出该循环
    while True:
        # 从 redis 数据库中获取 item ， 类型是字符串
        item = r.lpop(redis_items)

        # 判断 item是否有值
        if not item:
            # dingdian:items 中没有取到值后， 推出该次 转移操作
            break
        # item中有值
        else:
            try:
                # 字符串反序列化为 dict
                item = json.loads(item)
                item['keyword'] = parse.unquote(item['keyword'].replace('%25', '%'))
                # 将 item 写入到 mysql 数据库中
                mysql_handler.insertOne('insert into job_position(from_site,keyword,position_name,company_name,work_year,salary,education,city,create_time,description) '
                                        'values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',
                                        (item['from_site'], item['keyword'], item['position_name'], item['company_name'],
                                         item['work_year'], item['salary'], item['education'],
                                             item['city'], item['create_time'], item['description']))
                # 执行 mysql 数据的 commit
                mysql_handler.end()

                print('转移一条')
            except:
                print('错误')

    print('转移完成！')
        # 等待 4个小时，继续执行数据转移操作！！
        # time.sleep(4*60*60)

if __name__ == '__main__':
    # fun_redis_to_mysql('job51:items')
    fun_redis_to_mysql('zhaopin:items')
    # fun_redis_to_mysql('lagou:items')
    # fun_redis_to_mysql('zhipin:items')